package ar.frba.utn.diseñosistemas.UI;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import com.uqbar.commons.collections.Transformer;

import ar.frba.utn.diseñosistemas.TP2.Asiento;
import ar.frba.utn.diseñosistemas.ViewModels.BuscadorViewModel;

public class BuscarWindow extends SimpleWindow<BuscadorViewModel>
{
	public BuscarWindow(WindowOwner parent, BuscadorViewModel model) {
		super(parent, model);
		this.setTaskDescription("Buscador de Asientos");
	}

	@Override
	protected void addActions(Panel actionsPanel) 
	{
		new Button(actionsPanel).setCaption("Comprar")
		.onClick(new MessageSend(this, "comprar"));
		new Button(actionsPanel).setCaption("Reservar")
				.onClick(new MessageSend(this, "reservar"));
		new Button(actionsPanel).setCaption("Cerrar")
				.onClick(new MessageSend(this, "close"));
	}

	@Override
	protected void createFormPanel(Panel mainPanel) 
	{
		this.setTitle("Aterrizar.com");
		mainPanel.setLayout(new VerticalLayout());
		this.createFiltersPanel(mainPanel);
		this.createResultGrid(mainPanel);
	}
	
	private void createFiltersPanel(Panel mainPanel)
	{	
		Panel filtros = new Panel(mainPanel).setLayout(new HorizontalLayout());
		new Label(filtros).setText("Origen:");
		new TextBox(filtros).bindValueToProperty("origen");
		new Label(filtros).setText("Destino:");
		new TextBox(filtros).bindValueToProperty("destino");
		new Label(filtros).setText("Fecha:");
		new TextBox(filtros).bindValueToProperty("fecha");
		new Button(filtros).onClick(new MessageSend(this.getModelObject(), "buscar"))
						   .setCaption("Buscar");
	}
	private void createResultGrid(Panel mainPanel)
	{
		Table<Asiento> tablaAsientos = new Table<Asiento>(mainPanel, Asiento.class);
		tablaAsientos.setHeigth(300);
		tablaAsientos.bindItemsToProperty("resultados");
		tablaAsientos.bindValueToProperty("asientoSeleccionado");

		new Column<Asiento>(tablaAsientos).bindContentsToProperty("nombreAerolinea")
		  								  .setTitle("Aerolinea");
		new Column<Asiento>(tablaAsientos).bindContentsToProperty("codigoVuelo")
										  .setTitle("Vuelo");
		new Column<Asiento>(tablaAsientos).bindContentsToProperty("numeroAsiento")
		  								  .setTitle("Asiento");
		new Column<Asiento>(tablaAsientos).bindContentsToProperty("precio")
				  						  .setTitle("Precio");
		new Column<Asiento>(tablaAsientos).bindContentsToProperty("ubicacion")
										  .setTitle("Ubicacion");
		new Column<Asiento>(tablaAsientos).bindContentsToProperty("clase")
		  								  .setTitle("Clase");
	}

	public void comprar()
	{
		this.getModelObject().comprar();
		this.showInfo("La compra se realizo satisfactoriamente");
	}
	
	public void reservar()
	{
		try
		{
			this.getModelObject().reservar();
			this.showInfo("La reserva se realizo satisfactoriamente");
		}
		catch (ReservaUserException e) {
			new SobreReservaDialog(this, this.getModelObject()).open();
		}
	}
}